const baseUrl = 'http://localhost:8010'  // 后端地址

export default function request({ url, method = 'GET', data = {}, params = {}, header = {} }) {
	const token = uni.getStorageSync('token') || ''

	// 不需要携带 token 的白名单接口
	const whiteList = ['/user/login', '/user/getCode', '/user/register','/ai/chat']

	// 是否需要加 token（不在白名单中则加）
	const isNeedToken = !whiteList.includes(url)

	// 构造最终 header
	const finalHeader = {
		'Content-Type': 'application/json',
		...header
	}

	if (isNeedToken && token) {
		finalHeader['Authorization'] = `Bearer ${token}`
	}

	// 处理GET请求的参数
	let finalUrl = baseUrl + url
	let requestData = data
	
	if (method.toUpperCase() === 'GET' && (params && Object.keys(params).length > 0)) {
		// GET请求使用params参数构建查询字符串
		const queryString = Object.keys(params)
			.map(key => `${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`)
			.join('&')
		finalUrl = `${finalUrl}?${queryString}`
		requestData = {} // GET请求不使用data字段
		console.log('GET请求URL:', finalUrl)
	} else if (method.toUpperCase() === 'GET' && data && Object.keys(data).length > 0) {
		// 兼容旧的data方式（转换为查询字符串）
		const queryString = Object.keys(data)
			.map(key => `${encodeURIComponent(key)}=${encodeURIComponent(data[key])}`)
			.join('&')
		finalUrl = `${finalUrl}?${queryString}`
		requestData = {} // GET请求不使用data字段
		console.log('GET请求URL (兼容模式):', finalUrl)
	}

	// 如果是POST请求，记录详细的请求数据用于调试
	if (method.toUpperCase() === 'POST') {
		console.log('POST请求调试信息:')
		console.log('- URL:', finalUrl)
		console.log('- 请求数据:', requestData)
		console.log('- 请求数据类型:', typeof requestData)
		if (requestData && requestData.userId) {
			console.log('- 请求中的userId:', requestData.userId)
			console.log('- userId类型:', typeof requestData.userId)
		}
	}

	return new Promise((resolve, reject) => {
		uni.request({
			url: finalUrl,
			method,
			data: requestData,
			header: finalHeader,
			success: (res) => {
				console.log('请求响应:', res)
				if (res.statusCode === 200) {
					if (res.data.code === 200) {
						// 对于支付接口，需要返回完整响应（包含message）
						if (finalUrl.includes('/pay/payOrder')) {
							resolve(res.data) // 返回完整响应，包含message字段
						} else {
							resolve(res.data.data) // 其他接口返回data字段
						}
					} else {
						// 不自动显示toast，让调用方处理
						// 对于秒杀等特殊业务，需要自定义错误处理
						resolve(res.data) // 返回完整的响应数据，包括错误信息
					}
				} else if (res.statusCode === 400) {
					// 对于400错误，提供详细的错误信息用于调试
					console.error('400错误详情:', res)
					console.error('请求URL:', finalUrl)
					console.error('请求数据:', requestData)
					console.error('请求头:', finalHeader)
					
					uni.showToast({
						title: `请求参数错误 ${res.statusCode}`,
						icon: 'none'
					})
					reject({
						statusCode: res.statusCode,
						data: res.data,
						error: '请求参数错误',
						requestUrl: finalUrl,
						requestData: requestData
					})
				} else {
					// 对于其他非200状态码，也要提供详细的错误信息
					console.error('请求失败:', res)
					uni.showToast({
						title: `服务器错误 ${res.statusCode}`,
						icon: 'none'
					})
					reject(res)
				}
			},
			fail: (err) => {
				console.error('网络请求失败:', err)
				uni.showToast({
					title: '网络请求失败',
					icon: 'none'
				})
				reject(err)
			}
		})
	})
}
